package charger;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;

import donnee.Revue;

public class Input {

	private final static Input instance = new Input();

	public static Input getInstance() {
		return instance;
	}

	private List<Revue> revues;
	private HashMap<String, Revue> revue_id;

	public Input() {
		revues = new LinkedList<Revue>();
		revue_id = new HashMap<>();
	}

	// lecture du fichier texte
	public void lire(String fichier) throws IOException {

		InputStream ips = new FileInputStream(fichier);
		InputStreamReader ipsr = new InputStreamReader(ips);
		BufferedReader br = new BufferedReader(ipsr);

		String ligne;

		while ((ligne = br.readLine()) != null) {
			Revue revue = decoupe(ligne);
			if (revue != null)
			{
				revues.add(revue);
				revue_id.put(revue.getId(), revue);
			}
				
		}

		br.close();
	}

	private Revue decoupe(String chaine) {
		StringTokenizer ligne = new StringTokenizer(chaine, " ");
		String id = ligne.nextToken();
		String s = ligne.nextToken();

		if (!s.contentEquals("review"))
			return null;

		int[] contenue = extrait(ligne);
		int[] note = Output.getInstance().getNotes(id);

		return new Revue(id, contenue, note);
	}

	public List<Revue> getRevues() {
		return revues;
	}

	private int[] extrait(StringTokenizer ligne) {

		int nbcouple = ligne.countTokens();
		int[] contenue = new int[nbcouple];

		for (int i = 0; i < nbcouple; i++) {
			StringTokenizer couple = new StringTokenizer(ligne.nextToken(), ":");
			int partie1 = Integer.parseInt(couple.nextToken());
			contenue[i] = partie1;
		}

		return contenue;
	}

	public Revue getRevue(String id_revue) {
		return revue_id.get(id_revue);
	}
}
